package com.cakin.javademo;

/**
 * @ClassName: Employee2
 * @Description: 类变量的测试
 * @Date: 2020/6/12
 * @Author: cakin
 */

/**
 * ，。
 * 。
 * <p>
 * 。
 * 。
 * <p>
 * <p>
 * <p>
 *
 *
 *
 */
public class Employee2 {
    // salary是静态的私有变量,类变量也称为静态变量,在类中以static关键字声明，但必须在方法、构造方法和语句块之外
    // 无论一个类创建了多少个对象，类只拥有类变量的一份拷贝
    // 数值型变量默认值是0，布尔型默认值是false，引用类型默认值是null。
    // 如果静态变量不是public和final类型，其命名方式与实例变量以及局部变量的命名方式一致。小驼峰.
    private static double salary;
    // DEPARTMENT是一个常量
    public static final String DEPARTMENT = "Development ";

    public static void main(String args[]) {
        salary = 1000;
        System.out.println(DEPARTMENT + "average salary:" + salary);
        Employee2 employee1 = new Employee2();
        employee1.salary = 2000;
        Employee2 employee2 = new Employee2();
        employee2.salary = 3000;
        System.out.println(employee1.salary);
        // 常量初始化后不可改变。
        // NUM = 5;
        System.out.println("num=" + NUM);
        // 静态变量可以通过：ClassName.VariableName的方式访问。
        System.out.println("a="+Employee2.a);
    }



    // 此外，静态变量还可以在静态语句块中初始化。
    public static int a;
    static {
        a = 9;
        System.out.println("静态块");
    }

    // 与实例变量具有相似的可见性。但为了对类的使用者可见，大多数静态变量声明为public类型
    public static int t = 7;

    // 常量是指声明为public/private，final和static类型的变量。
    // 静态变量除了被声明为常量外很少使用。会和final一起使用
    // 静态变量储存在静态存储区。经常被声明为常量，很少单独使用static声明变量
    // 静态变量在程序开始时创建，在程序结束时销毁,生命周期很长
    // 变量的值可以在声明的时候指定
    // 类变量被声明为public static final类型时，类变量名称必须使用大写字母。
    private static final int NUM = 0;
    private static int NUM2;

    public Employee2() {
        // 也可以在构造方法中指定。
        NUM2 = 5;
        System.out.println("构造方法");
    }
}
